package com.sxj.corejava.code08_常用类.String类;

import java.util.Arrays;

/**
 * @author 石小俊
 * @date 2025年01月10日
 */
public class Test06_正则表达式 {

    public static void main(String[] args) {
        System.out.println("*************************正则表达式规则*************************");
        // 匹配指定字符
        // 指定字符串中是否只有一个英文字母a
        System.out.println("a".matches("a"));
        // ?:0或1个
        System.out.println("aa".matches("a?"));
        // *:0或多个
        System.out.println("".matches("a*"));
        System.out.println("b".matches("a*"));
        // +:1或多个
        System.out.println("a".matches("a+"));
        System.out.println("aaaaaaaaaaaaaaaa".matches("a+"));
        // {m}:m个
        System.out.println("aaa".matches("a{3}"));
        // {m,}:至少m个
        System.out.println("aaaa".matches("a{3,}"));
        // {m,n}:至少m个,最多n个
        System.out.println("aaaaa".matches("a{3,5}"));
        System.out.println("aaaaaa".matches("a{3,5}"));

        // [x]:匹配列表中的字符,当前字符只要是列表中的任意一个都行
        System.out.println("aaaab".matches("[ab]{5}"));
        // [x-y]:匹配字符串中的字符是否处于x-y的范围
        // 例如:a-z:所有英文字母,a-d表示abcd都行,0-9:所有数字,1-4表示1234
        System.out.println("aaaab".matches("[ab]{5}"));
        System.out.println("admin".matches("[a-z]+"));
        System.out.println("admin123".matches("[a-z1-3]+"));
        System.out.println("admin123".matches("[a-z0-9]+"));
        System.out.println("admin123@".matches("[a-z0-9@]+"));
        System.out.println("admin123@_!-".matches("[a-z0-9@_!-]+"));
        // .表示匹配换行符以外的任意字符
        System.out.println("admin123@_!-".matches(".+"));
        System.out.println("\nadmin123@_!-".matches(".+"));
        // 如果匹配字符.则需要转移,即为:\.,由于Java中\也需要转移,因此最终为:\\.
        System.out.println("3.13".matches("[\\.0-9]+"));
        System.out.println("3.13a".matches("[\\.0-9]+"));
        // \d:所有数字
        System.out.println("312334098".matches("\\d+"));
        System.out.println("31233409a8".matches("\\d+"));
        // \D:所有数字以外的字符
        System.out.println("asda@!".matches("\\D+"));
        // \w:英文字母、数字、下划线
        System.out.println("admin123_".matches("\\w+"));
        System.out.println("admin1@23_".matches("\\w+"));
        // \W:除了英文字母、数字、下划线以外的字符
        System.out.println("!@#$".matches("\\W+"));
        // \s:空格
        System.out.println("     ".matches("\\s+"));
        // \S:除了空格
        System.out.println("admin123_@!".matches("\\S+"));
        System.out.println("admin123_@! ".matches("\\S+"));

        // 匹配3或5位数字
        // ():分组,将括号中的内容作为一个整体
        System.out.println("123".matches("\\d{3}(\\d{2})?"));
        System.out.println("1234".matches("\\d{3}(\\d{2})?"));
        System.out.println("12345".matches("\\d{3}(\\d{2})?"));
        // |:或者
        System.out.println("123".matches("\\d{3}|\\d{5}"));
        System.out.println("1234".matches("\\d{3}|\\d{5}"));
        System.out.println("12345".matches("\\d{3}|\\d{5}"));

        // 匹配是否都是英文字母
        System.out.println("HelloWorld".matches("[a-zA-Z]+"));

        System.out.println("********************************replaceAll替换所有********************************");
        String s = "Hello123World12I123am12admin";
        // 将连续的数字转换成一个空格
        System.out.println(s.replaceAll("\\d+", " "));
        // 将每个数字都转换成空格
        System.out.println(s.replaceAll("\\d", " "));

        System.out.println("********************************replaceFirst替换第一个********************************");
        System.out.println(s.replaceFirst("\\d+", " "));

        System.out.println("********************************split替换第一个********************************");
        String[] arr = s.split("\\d+");
        System.out.println(Arrays.toString(arr));
        s = "Hello123admin@jack#tom$lucy";
        arr = s.split("[0-9@#$]+");
        System.out.println(Arrays.toString(arr));
    }

}
